package com.bgl.mall.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bgl.mall.common.ServerResponse;
import com.bgl.mall.pojo.Order;
import com.bgl.mall.vo.OrderProductVo;
import com.bgl.mall.vo.OrderVo;
import com.github.pagehelper.PageInfo;

import java.util.Map;

/**
 * @author Bu Guoliang
 * @date 2019/03/02 00:10
 * @since 1.8
 */
public interface IOrderService extends IService<Order> {
    /**
     * 支付接口
     * @param userId
     * @param orderNo
     * @param path
     * @return
     */
    ServerResponse pay(Integer userId, Long orderNo, String path);

    /**
     * 支付宝回调接口
     * @param paramMap
     * @return
     */
    ServerResponse alipayCallback(Map<String, String> paramMap);

    /**
     * 查询订单支付状态
     * @param userId
     * @param orderNo
     * @return
     */
    ServerResponse queryOrderPayStatus(Integer userId, Long orderNo);

    /**
     * 创建订单
     * @param userId
     * @param shippingId
     * @return
     */
    ServerResponse<OrderVo> createOrder(Integer userId, Integer shippingId);

    /**
     * 取消订单
     * @param userId
     * @param orderNo
     * @return
     */
    ServerResponse<String> cancelOrder(Integer userId, Long orderNo);

    /**
     * 获取订单购物车商品
     * @param userId
     * @return
     */
    ServerResponse<OrderProductVo> getOrderCartProduct(Integer userId);

    /**
     * 获取订单明细
     * @param userId
     * @param orderNo
     * @return
     */
    ServerResponse<OrderVo> getOrderDetail(Integer userId, Long orderNo);

    /**
     * 分页获取订单列表
     * @param userId
     * @param pageNum
     * @param pageSize
     * @return
     */
    ServerResponse<PageInfo<OrderVo>> getOrderList(Integer userId, int pageNum, int pageSize);

    /**
     * 分页获取后台管理订单列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    ServerResponse<PageInfo> manageList(int pageNum, int pageSize);

    /**
     * 获取后台订单明细
     * @param orderNo
     * @return
     */
    ServerResponse<OrderVo> manageDetail(Long orderNo);

    /**
     * 后台根据订单号查询订单
     * @param orderNo
     * @param pageNum
     * @param pageSize
     * @return
     */
    ServerResponse<PageInfo> manageSearch(Long orderNo, int pageNum, int pageSize);

    /**
     * 该订单是否发货
     * @param orderNo
     * @return
     */
    ServerResponse<String> manageSendGoods(Long orderNo);
}
